﻿using System.Windows.Forms;
using System.IO;
using System.Data.SqlClient;
using System;
using System.Data;

namespace Utils
{
    public class ConnectDatabase
    {
        public static SqlConnection mySqlConn;

        public ConnectDatabase() { }

        ~ConnectDatabase() { }

        private void DisplayError(SqlException ex)
        {
            string ErrorMessage;
            switch (ex.Number)
            {
                case 17:
                    ErrorMessage = "Máy chủ không tồn tại hoặc không truy nhập được!";
                    break;
                case 53:
                    ErrorMessage = "Không thể kết nối tới Cơ sở dữ liệu.\nHãy kiểm tra lại thông tin kết nối!";
                    break;
                case 4060:
                    ErrorMessage = "Không tìm thấy CSDL!";
                    break;
                case 18456:
                    ErrorMessage = "Đăng nhập sai!";
                    break;
                case 547:
                    ErrorMessage = "Không thể thực hiện được vì đã có dữ liệu ràng buộc với bản ghi này!";
                    break;
                case 2627:
                case 2601:
                    ErrorMessage = "Dữ liệu này đã được cập nhật!";
                    break;
                case 8152:
                    ErrorMessage = "Dữ liệu quá dài...";
                    break;
                default:
                    ErrorMessage = ex.Message;
                    break;
            }
            MessageBox.Show(ErrorMessage, "Thông báo...", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        public string ReadConnectionString(string FilePath)
        {
            string srvName, dataName, userName, passName;
            string sqlConnectionString = "";
            if (File.Exists(FilePath))
            {
                string[] readText = File.ReadAllLines(FilePath);
                srvName = Encryption.DeCode(readText[0].Trim());
                dataName = Encryption.DeCode(readText[1].Trim());
                userName = Encryption.DeCode(readText[2].Trim());
                passName = Encryption.DeCode(readText[3].Trim());
                //Program.myForm_Main.tSSServerName.Text = "Máy chủ: " + srvName + " - Cơ sở dữ liệu: " + dataName + "  ";
                sqlConnectionString = "Data Source='" + srvName + "';Initial Catalog='" + dataName + "';Persist Security Info=True;User ID='" + userName + "';Password='" + passName + "'";
            }
            return sqlConnectionString;
        }

        public Boolean ConnecDatabase(string FilePath)
        {
            //if ((mySqlConn != null) && (mySqlConn.State == ConnectionState.Open)) return true;
            try
            {
                mySqlConn = new SqlConnection(ReadConnectionString(FilePath));
                mySqlConn.Open();
                return true;
            }
            catch (SqlException Sqlex)
            {
                DisplayError(Sqlex);
                mySqlConn = null;
                return false;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                mySqlConn = null;
                return false;
            }
        }

        //Kết nối CSDL
        public Boolean ConnecDatabase(string strServer, string strDatabase, string strUID, string strPWID)
        {
            string strConn = "";
            strConn = "Server=" + strServer;
            strConn += ";User ID=" + strUID;
            strConn += ";Password=" + strPWID;
            strConn += ";Database=" + strDatabase;
            //if ((mySqlConn != null) && (mySqlConn.State == ConnectionState.Open)) return true;
            try
            {
                mySqlConn = new SqlConnection(strConn);
                mySqlConn.Open();
                return true;
            }
            catch (SqlException Sqlex)
            {
                DisplayError(Sqlex);
                mySqlConn = null;
                return false;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                mySqlConn = null;
                return false;
            }
        }

        //Đóng kết nốivoi CSDL
        public void DisConnectDatabase()
        {
            if (mySqlConn == null) return;
            try
            {
                if (mySqlConn.State == ConnectionState.Open)
                {
                    mySqlConn.Close();
                    mySqlConn.Dispose();
                }
            }
            catch (SqlException Sqlex)
            {
                DisplayError(Sqlex);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        //Dong ket noi theo cach 2
        public void CloseConnectDatabase()
        {
            if (mySqlConn == null) return;
            try
            {
                if (mySqlConn.State == ConnectionState.Open)
                {
                    mySqlConn.Close();
                    //mySqlConn.Dispose();
                }
            }
            catch (SqlException Sqlex)
            {
                DisplayError(Sqlex);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
    }
}
